package com.alignet.gn.web;

import java.io.Serializable;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedProperty;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import com.alignet.gn.hibernate.TgnUser;
import com.alignet.gn.service.UserService;
import com.alignet.gn.service.impl.Constants;
import com.alignet.gn.util.GNUtils;

@Scope("session")
@Component("datosPersonales")
public class DatosPersonalesBean implements Serializable{

	private static final long serialVersionUID = -6806540982809561427L;
	private static final Logger log = LoggerFactory.getLogger(DatosPersonalesBean.class);
	private static  org.apache.log4j.Logger logMdc = org.apache.log4j.Logger.getLogger("MDC");
	private String pageResponse;
	
	private TgnUser userD;
	private String usuario;
	private String nombre;
	private String apellido;	
	private String idioma;
		
	@ManagedProperty(value = "#{UserService}")
	private UserService serviceU;

	@Autowired
	public void setTransactionBean(UserService serviceU) {
		this.serviceU=serviceU;
	}
	
	public String getPageResponse() {
		return pageResponse;
	}

	public void setPageResponse(String pageResponse) {
		this.pageResponse = pageResponse;
	}
	
	///ACTION
	public String processAction() {
		return pageResponse;
	}
	
	public void iniciarUsuario(ActionEvent event) {
		log.debug("[ procesMenuQuery ]");
		pageResponse = Constants.PAGE_DATOSPERSONALES;
		
		userD = serviceU.finUserSession();
		usuario=userD.getVcLogin();
		nombre=userD.getVcName();
		apellido=userD.getVcLastname();
		idioma=userD.getVcLanguage();		
	}
	
	public void updateUser(ActionEvent event){
		FacesContext fc = FacesContext.getCurrentInstance();
 		final UIComponent components = event.getComponent();
		log.debug("[ updateUser ]");
		pageResponse=Constants.PAGE_DATOSPERSONALES;
		
		if(validate()){
			userD.setVcName(nombre);
			userD.setVcLastname(apellido);
			userD.setVcLanguage(idioma);		
					
			String rpta=serviceU.updateUser(userD);
			if(!rpta.equals("success")){
				FacesMessage msg = new FacesMessage("", GNUtils.getMessage(rpta));
	            msg.setSeverity(FacesMessage.SEVERITY_ERROR);
	            fc.addMessage(components.getClientId(), msg);
				fc.renderResponse();
			}else{
				log.info("Datos actualizados");
				fc.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Los datos se actualizaron satisfactoriamente", null));
				fc.renderResponse();
			}					
		}		
	}
	
	private boolean validate(){
		FacesContext fc = FacesContext.getCurrentInstance();		
		
		if( StringUtils.isEmpty(nombre)){
			log.info("Nombre vacio");
			fc.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Debe llenar el campo Nombre", null));
			fc.renderResponse();
			return false;
		}
		
		if( StringUtils.isEmpty(apellido)){
			log.info("Apellido vacio");
			fc.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Debe llenar el campo Apellido", null));
			fc.renderResponse();
			return false;
		}		
		
		if( StringUtils.isEmpty(idioma)){
			log.info("Idioma vacio");
			fc.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Debe seleccionar un idioma", null));
			fc.renderResponse();
			return false;
		}		
		
		return true;
		
	}
	
	public String getUsuario() {
		return usuario;
	}

	public void setUsuario(String usuario) {
		this.usuario = usuario;
	}

	public String getNombre() {
		return nombre;
	}

	public void setNombre(String nombre) {
		this.nombre = nombre;
	}

	public String getApellido() {
		return apellido;
	}

	public void setApellido(String apellido) {
		this.apellido = apellido;
	}

	public String getIdioma() {
		return idioma;
	}

	public void setIdioma(String idioma) {
		this.idioma = idioma;
	}

}